Developing and maintaining computer system software has long been recognized as a difficult and error prone technology. Problems such as optimizing, simulating, analyzing, and debugging executing software have continued to exist. The need for improvements in optimization which contain features to aid in solving programming problems is prevalent.
Many computer programs employ techniques that include repetitive processing. For instance, software loop and recursion constructs are often used to instruct a computer to execute repetitively. Unnecessary code jumps between instructions in computer memory and instructions located on slower storage media are also inefficient. During compilation these and other software constructs and techniques, known and appreciated by those skilled in the art, may generate inefficient code instructions. Software optimization tools seek to employ techniques to exploit opportunities to improve the efficiency of generated code instructions.
Software optimization tools are used in computer software, architecture, and hardware design. For instance, software debugging, monitoring, and profiling tools provide useful information about the execution of a software program which is used by software simulation tools. Software simulation tools also provide information which is in turn, used by software analyzer tools to predict future behavior of a software program.
Software simulation, as used herein, is a type of optimization and is the process of updating the state of an original software program in a user process which has been maintained in software, often called the virtual state. The user process is compiled and executes within a software system environment. The software system environment information which is available at compile-time, before the loader is invoked, is different than the information available after the loader is invoked, at run-time. Simulation may occur while the software program is executing, at run-time, thereby adding execution overhead that inhibits the improvement of execution performance.
Further, software simulation tools may include a class of tools that translate original code instructions into different instructions. The simulation tools translate both software instruction execution data and computer environment data, such as the machine state of registers, condition codes, and hardware-specific parameters. The translation creates software program state values which are formatted to execute on a pre-determined computer environment which may be different than the original computer environment. Monitoring or profiling by contrast simply records the state of the original program by a logging mechanism. While simulation, monitoring, and profiling provide useful information to aid in software development, they add overhead to the execution of software and thereby also inhibit the improvement of execution performance.
Software optimization is necessary to improve the efficiency of computer resource usage even with the introduction of these tools. For instance, prior art simulation tools degrade execution performance of the software. At each code instruction the simulation tool can check the state of the software environment and save the current computer system state values and environment data. However, the complex nature of the software simulation tool and its ability to analyze executing code at run-time adds a significant amount of processing and logging overhead. Optimization for run-time environments is critical to improving simulation tool overhead and other forms of inefficient computer resource allocation.
Therefore, from the foregoing it will be apparent that poor performance and cumbersome methods of operation with past monitoring and debugging, simulation, and analysis tools have limited the further improvement of software maintenance and development techniques.